<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/ajax.js"></script>
</head>

<body>

</body>
<script>

    // 构造函数Promise的方法     => Array.isArray() String.fromCharCode()  Date.now()

    // all()    =>   Promise.all()
    // Promise.all()方法用于将多个 Promise 实例，包装成一个新的 Promise 实例。

    // p的状态由p1、p2、p3决定，分成两种情况。

    // （1）只有p1、p2、p3的状态都变成fulfilled，p的状态才会变成fulfilled，此时p1、p2、p3的返回值组成一个数组，传递给p的回调函数。

    // （2）只要p1、p2、p3之中有一个被rejected，p的状态就变成rejected，此时第一个被reject的实例的返回值，会传递给p的回调函数。

    // T1
    // T2   => T  按最慢的来  
    // T3



    function readText(url, delay = 0) {
        var p = new Promise(function (resolve, reject) {
            setTimeout(function () {
                $.ajax({
                    type: "get",
                    url: url,
                    // dataType: "text",
                    success: function (txt) {
                        resolve(txt);
                    }
                });
            }, delay);
        })
        return p;
    }


    // console.time("a");
    // var p1 = readText("../data/1.txt", 1000);
    // var p2 = readText("../data/2.txt", 3000);
    // var p3 = readText("../data/3.txt", 2000);

    // var p = Promise.all([p1, p2, p3]);
    // console.log(p);

    // p.then(list => {
    //     console.log("已成功", list);
    //     console.timeEnd("a");
    // }).catch(err => {
    //     console.log("已失败", err);
    // })


    Promise.all([
        readText("../data/1.txt", 1000),
        readText("../data/2.txt", 3000),
        readText("../data/3.txt", 2000),
    ]).then(list => {
        console.log("已成功", list);
        console.timeEnd("a");
    }).catch(err => {
        console.log("已失败", err);
    })


</script>

</html>